package app;

import java.util.ArrayList;
import java.util.List;

import dao.PlatoDAO;
import app.vista.MenuPrincipalView;
import beans.PlatoVO;
import beans.RestauranteVO;
import srv.RestauranteSRV;
import negocio.Plato;
import negocio.Restaurante;

public class Sistema 
{
	private static Sistema instancia;
	private List<Restaurante> restaurantes;
	private RestauranteSRV restauranteSRV;
	private Administracion administracion;
	
	private Sistema()
	{
		restaurantes = new ArrayList<Restaurante>();
		administracion = Administracion.getInstancia();
		restauranteSRV = new RestauranteSRV();
	}
	
	public static Sistema getInstancia()
	{
		if(instancia == null)
			instancia = new Sistema();
		return instancia;
	}
	
	public void agregarRestaurante(Restaurante restaurante)
	{
		restaurantes.add(restaurante);
		restauranteSRV.persistRestaurante(restaurante);
	}
	
	public Restaurante getRestauranteById(int id)
	{
		Restaurante r = restauranteSRV.getRestauranteById(id);
		r.inicializarRestaurante();
		return r;
	}
	
	public void updateRestaurante(Restaurante restaurante)
	{
		restauranteSRV.updateRestaurante(restaurante);
	}
	
	public List<Restaurante> getRestaurantes() 
	{
		return restaurantes;
	}
	
	public Restaurante getRestauranteByName(String restName) 
	{
		return restauranteSRV.getRestauranteByNombre(restName);
	}

	public void setRestaurantes(ArrayList<Restaurante> restaurantes) {
		this.restaurantes = restaurantes;
	}
	
	public ArrayList<PlatoVO> getPlatos() 
	{
		ArrayList<PlatoVO> platosV0 = new ArrayList<PlatoVO>();
		List<Plato> platos = PlatoDAO.getInstancia().getPlatos();
		for (int i = 0 ; i < platos.size() ; i++)
		{
				platosV0.add(platos.get(i).getVO());
		}
		return platosV0;
	}
	
	public List<RestauranteVO> getRestaurantesVO() 
	{
		ArrayList<RestauranteVO> restV0 = new ArrayList<RestauranteVO>();
		for (int i = 0 ; i < restaurantes.size() ; i++)
		{
				restV0.add(restaurantes.get(i).getVO());
		}
		return restV0;
	}

	public RestauranteSRV getRestauranteSRV() 
	{
		return restauranteSRV;
	}

	public void setRestauranteSRV(RestauranteSRV restauranteSRV) {
		this.restauranteSRV = restauranteSRV;
	}

	public Administracion getAdministracion() {
		return administracion;
	}

	public void setAdministracion(Administracion administracion) {
		this.administracion = administracion;
	}

	public static void setInstancia(Sistema instancia) {
		Sistema.instancia = instancia;
	}

	public void setRestaurantes(List<Restaurante> restaurantes) {
		this.restaurantes = restaurantes;
	}

	public static void Start(Sistema sys) 
	{
			MenuPrincipalView.getInstancia(sys).setLocationRelativeTo(null);
			MenuPrincipalView.getInstancia(sys).setVisible(true);
	}
}
